﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NDF.DataAccess.Instrumentation
{
    /// <summary>
    /// 为抽象类 <see cref="DataInstrumentationProvider"/> 的默认空实现。该类型中的 Fire 相关方法不执行任何动作。
    /// </summary>
    public class NullDataInstrumentationProvider : DataInstrumentationProvider
    {
        private static NullDataInstrumentationProvider instrumentationProvider;

        /// <summary>
        /// 获取类型 <see cref="NullDataInstrumentationProvider"/> 的默认唯一实例。
        /// </summary>
        public static NullDataInstrumentationProvider Default
        {
            get
            {
                if (instrumentationProvider == null)
                {
                    instrumentationProvider = new NullDataInstrumentationProvider();
                }
                return instrumentationProvider;
            }
        }

        /// <summary>
        /// 初始化 <see cref="NullDataInstrumentationProvider"/> 类型的实例。
        /// </summary>
        protected NullDataInstrumentationProvider() { }


        /// <summary>
        /// 当 <see cref="System.Data.Common.DbCommand"/> 对象顺利执行完成命令时，执行该方法。
        /// 该方法实际不执行任何动作。
        /// </summary>
        /// <param name="startTime">表示 <see cref="System.Data.Common.DbCommand"/> 对象开始执行命令的时间。</param>
        public override void FireCommandExecutedEvent(DateTime startTime)
        {
        }

        /// <summary>
        /// 当 <see cref="System.Data.Common.DbCommand"/> 对象执行命令出错时，执行该方法。
        /// 该方法实际不执行任何动作。
        /// </summary>
        /// <param name="commandText">表示 <see cref="System.Data.Common.DbCommand"/> 对象执行的命令文本。</param>
        /// <param name="connectionString">表示 <see cref="System.Data.Common.DbCommand"/> 对象所使用的 <see cref="System.Data.Common.DbConnection"/> 的连接字符串信息。</param>
        /// <param name="exception">表示 <see cref="System.Data.Common.DbCommand"/> 对象执行命令出错时所触发的异常。</param>
        public override void FireCommandFailedEvent(string commandText, string connectionString, Exception exception)
        {
        }

        /// <summary>
        /// 当 <see cref="System.Data.Common.DbConnection"/> 对象操作出错时(例如 Open、Close 操作时出现异常等情况)，执行该方法。
        /// 该方法实际不执行任何动作。
        /// </summary>
        /// <param name="connectionString">表示 <see cref="System.Data.Common.DbConnection"/> 的连接字符串信息。</param>
        /// <param name="exception">表示 <see cref="System.Data.Common.DbConnection"/> 对象操作出错时所触发的异常。</param>
        public override void FireConnectionFailedEvent(string connectionString, Exception exception)
        {
        }

        /// <summary>
        /// 当 <see cref="System.Data.Common.DbConnection"/> 对象顺利执行 Open 方法打开数据库连接时，执行该方法。
        /// 该方法实际不执行任何动作。
        /// </summary>
        public override void FireConnectionOpenedEvent()
        {
        }
    }
}
